/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-08-08
 * Time: 23:10
 */

public class Solution {

    /**
     *  求一个数字二进制位中 1 的个数
     */
    private int getCount(int n) {
        int count = 0;
        while (n != 0) {
            n = n & (n-1);
            count++;
        }
        return count;
    }

    public int minFlips(int a, int b, int c) {
        int result = 0;
        // 得出来, (a | b) 与 c 差几个位
        // 其中包含了 中 1 的个数, 就是差了 几位
        // 原本该为 0 其实为 1 的, 这种只要 a, b 其中一个修改就行了
        // 原本该为 1 其实为 0 的, 这里面可能出现 a, b 这两个该位都为 1, 此时 a, b 都需要该
        // 所以光加上 1 的个数还不够, 要加上 a, b 都要改的部分
        int diff = (a | b) ^ c;
        result += getCount(diff);
        result += getCount(((diff)&(a&b)));
        return result;
    }
}
